package dingdan

import (
	"errors"
	"server/aa/lysd/gouwuche"
	"server/aa/lysd/shangpin"
	"server/aa/lysd/sku"
	"server/amtf"
	"server/global"
	"time"

	"gorm.io/gorm"
)

var A手动挡 *amtf.S组件手动挡

func init() {
	A手动挡 = &amtf.S组件手动挡{}
	A手动挡.A增s7 = A增s7
}

func A增s7(订单 *S订单model) (err error) {
	err = global.GVA_DB.Transaction(func(tx *gorm.DB) error {
		订单.A状态 = "待付款"
		订单.A总价 = 0
		订单.A商品总价 = 0
		for i := range 订单.A明细 {
			明细 := &订单.A明细[i]
			var 库存 int
			var 价格 int
			// var sku *sku.Sskumodel
			sku := &sku.Sskumodel{}
			商品 := &shangpin.S商品model{}
			if 明细.SskumodelID != 0 {
				global.GVA_DB.Debug().Where("id = ?", 明细.SskumodelID).First(sku)
				库存 = sku.A库存
				价格 = sku.A价格
			} else {
				global.GVA_DB.Debug().Where("id = ?", 明细.S商品modelID).First(商品)
				库存 = 商品.A库存
				价格 = 商品.A价格
			}
			if 库存 < 明细.A数量 {
				return errors.New("库存不足")
			}

			订单.A商品总价 += 明细.A数量 * 价格

			// 扣减库存 增加销量
			if 明细.SskumodelID != 0 {
				if err = tx.Model(sku).
					Update("库存", gorm.Expr("库存 - ?", 明细.A数量)).
					Update("销量", gorm.Expr("销量 + ?", 明细.A数量)).Error; err != nil {
					return err
				}
			} else {
				if err = tx.Model(商品).
					Update("库存", gorm.Expr("库存 - ?", 明细.A数量)).
					Update("销量", gorm.Expr("销量 + ?", 明细.A数量)).Error; err != nil {
					return err
				}
			}
		}

		closeTime := time.Now().Add(time.Minute * 15)
		订单.A关闭时间 = &closeTime

		订单.A总价 = 订单.A商品总价 + 订单.A运费
		err = tx.Create(&订单).Error
		if err != nil {
			return err
		}

		// 删除购物车中的商品
		if 订单.A购物车ids != nil {
			err := tx.Where("id IN ?", 订单.A购物车ids).Delete(&gouwuche.S购物车model{}).Error
			if err != nil {
				return err
			}
		}
		return nil
	})
	return
}
